#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。

 

示例 1：

输入：target = 7, nums = [2,3,1,2,4,3]
输出：2
解释：子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2：

输入：target = 4, nums = [1,4,4]
输出：1
示例 3：

输入：target = 11, nums = [1,1,1,1,1,1,1,1]
输出：0

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/minimum-size-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

//典型的 滑动窗口
//int minSubArrayLen(int target, vector<int> &nums) {
//
//    int min = INT_MAX;//返回的长度
//    int sum = 0;//总大小
//    int startIndex = 0;
//    //这个i 代表结尾位置
//    for (int i = 0; i < nums.size(); ++i) {
//        sum += sum[i];
//        while (sum > target) {
//            if (i - startIndex + 1 < min)
//                min = i - startIndex + 1;
//            sum = sum - sum[startIndex++];
//        }
//
//    }
//
//    if (min == INT_MAX)
//        return 0;
//
//    return min;
//}


int minSubArrayLen1(int target, vector<int> &nums) {

    int low = 0;
    int maxH = nums.size();
    int high = 0;

    int res = nums.size();
    int sum = 0;
    //滑动窗口先定义for这个i代表结尾位置

    int startIndex = 0;
    for (int i = 0; i < maxH; ++i) {

        sum = sum + nums[i];

        while (sum > target) {
            sum = sum - nums[startIndex++];

            if (sum == target) {
                res = min(sum, i - startIndex + 1);
            }

        }


    }


    return res;
}















